package com.atguigu.gmall.product.util;

import com.atguigu.gmall.common.exception.GmallException;
import com.atguigu.gmall.common.handler.GlobalExceptionHandler;
import com.atguigu.gmall.common.result.ResultCodeEnum;
import org.csource.common.MyException;
import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.StorageClient1;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer;
import org.springframework.util.ClassUtils;

import java.io.IOException;
import java.net.URL;

/**
 * @Description: TODO
 * @Author: Mr.Cao
 * @DateTime: 2021/9/30 0:25
 * BMW F750GS
 **/
public class UploadUtil {
    private static  TrackerClient trackerClient = null;

    static {//0.设置配置文件的位置,进行读取
        try {
            //获取类路径下指定资源文件
            URL resource = ClassUtils.getDefaultClassLoader().getResource("fdfs_client.conf");
            String path = resource.getPath();//获取资源文件的绝对路径
            //System.out.println("fdfs_client.conf文件的绝对路径 = " + path);
            ClientGlobal.init(path);
            //1.连接Tracker跟踪器
             trackerClient=new TrackerClient();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
    * @Description: 文件上传
    * @Params: [file 文件数组, ext 扩展名]
    * @Author: CaoBo
    * @DateTime: 2021/9/30 0:31
    */
    public static String fileUpload(byte[] file,String ext){
        try {


            //2.返回存储节点地址
            TrackerServer trackerServer = trackerClient.getConnection();
            //3.连接存储节点
            StorageClient1 storageClient1 = new StorageClient1(trackerServer,null);
            //4.上传文件,返回的文件id
           String jpg = storageClient1.upload_file1(//参数1: 文件名的绝对路径
                    file,
                    ext,//参数二:扩展名
                    null);//参数三: 文件的元数据 例如: 大小尺寸,作者
            System.out.println("文件地址 = "+jpg);
            return jpg;
        } catch (Exception e) {
            e.printStackTrace();
            //抛出自定义异常
            throw new GmallException("文件上传失败", ResultCodeEnum.FAIL.getCode());
        }

    }
}
